package com.zhoumy.interview.study.collection;

import java.util.*;
import java.util.concurrent.CopyOnWriteArrayList;

/**
 * 集合类不安全问题
 * @author: zhoumy
 * @create: 2024年6月3日21:26:28
 */
public class ContainerNotSafeDemo {


    public static void main(String[] args) {
        /*List<String> list = Arrays.asList("a", "b", "c");
        list.forEach(System.out::println);*/

        /*List<String> list = new ArrayList<>();
        list.add("a");
        list.add("b");
        list.add("c");
        for (String element : list) {
            System.out.println(element);
        }*/

        //解决ArrayList现成不安全
        //第一种：new Vector<>()
        //第二种：Collections.synchronizedList(new ArrayList<>());
        //第三种：采用JUC里面的方法 new CopyOnWriteArrayList<>()

        //List<String> list = new ArrayList<>();
        //List<String> list = new Vector<>();
        //List<String> list = Collections.synchronizedList(new ArrayList<>());
        List<String> list = new CopyOnWriteArrayList<>();

        for (int i = 0; i < 30; i++) {
            new Thread(() -> {
                list.add(UUID.randomUUID().toString().substring(0, 8));
                System.out.println(list);
            }, String.valueOf(i)).start();
        }
        //java.util.ConcurrentModificationException
        /**
         *  1 故障现象
         *      java.util.ConcurrentModificationException
         *  2 导致原因
         *      并发争抢修改导致，参考我们的花名册签名情况
         *      一个人正在写入，另外一个同学过来抢夺，导致数据不一致异常。并发修改异常。
         *  3 解决方案
         *      3.1 new Vector<>()
         *      3.2 Collections.synchronized()
         *      3.3 采用JUC里面的方法：new CopyOnWriteArrayList<>()
         *
         *  4 优化建议
         */

    }
}
